//事件系统 : 自定义事件

//预定义

//引入一个事件的内置模块

const Emitter = require("events");
//emit创建事件对象
let eventObj = new Emitter();

//1.添加事件监听 类似addEventListener
//对象.on("事件名","事件函数")
// eventObj.on("myevent1", function () {
//   console.log("我是myevent1的事件函数111");
// });
// eventObj.on("myevent1", function () {
//   console.log("我是myevent1的事件函数222");
// });

//2.手动触发事件 : 事件对象.emit("自定义事件名")
// setTimeout(() => {
//   eventObj.emit("myevent1");
//   eventObj.emit("myevent1");
//   eventObj.emit("myevent1");
// }, 1000);

//
//
//
//3.添加事件监听的方式二: once
// once: 只能被触发一次
// eventObj.once("myevent1", function () {
//   console.log(1111);
// });
// eventObj.once("myevent1", function () {
//   console.log(2222);
// });

// setTimeout(() => {
//   eventObj.emit("myevent1"); //通过once绑定的事件只能触发一次事件
//   eventObj.emit("myevent1"); //后面写的都无效
//   eventObj.emit("myevent1"); //后面写的都无效
// }, 1000);

//
//
//
//
//
//4.获取事件对象的事件绑定的次数
//事件对象.listenerCount("事件名")
// eventObj.on("myevent1", function () {
//   console.log(1111);
// });
// eventObj.on("myevent1", function () {
//   console.log(2222);
// });
// eventObj.on("myevent1", function () {
//   console.log(3333);
// });
// console.log(eventObj.listenerCount("myevent1")); //3

//
//

//
//
//5.移除事件
//1.off  2.removeListener
// eventObj.on("myevent1", function () {
//   console.log(1111);
// });
// eventObj.on("myevent1", function () {
//   console.log(2222);
// });
// let fn = function () {
//   console.log(333);
// };

// eventObj.on("myevent1", fn);
// eventObj.on("myevent2", function () {
//   console.log(hello);
// });

// //移除绑定 : 事件对象.off("事件名称",事件函数)
//eventObj.off("myevent1", fn); //把myevent1里的事件移除掉了
// eventObj.removeListener("myevent1", fn);
// eventObj.emit("myevent1");
// eventObj.emit("myevent2");

//
//
//
//

//6.移除所有的绑定事件

//removeAllListeners 移除所有的绑定事件

eventObj.on("myevent1", function () {
  console.log(111);
});
eventObj.on("myevent1", function () {
  console.log(222);
});

eventObj.removeAllListeners(); //移除所有事件
eventObj.emit("myevent1");
